home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / SNNSV32.ZIP / SNNSv3.2 / xgui / sources / ui_kohonen.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-25  |  8.9 KB  |  326 lines

  1. /*****************************************************************************
  2.   FILE           : ui_kohonen.c
  3.   SHORTNAME      : ui_kohonen.c
  4.   SNNS VERSION   : 3.2
  5.  
  6.   PURPOSE        : Creation/Callback routines for Kohonen Window
  7.   NOTES          :
  8.  
  9.   AUTHOR         : Marcus Ritt
  10.   DATE           : July 13 1993
  11.  
  12.   CHANGED BY     : Guenter Mamier
  13.   IDENTIFICATION : @(#)ui_kohonen.c    1.5 3/2/94
  14.   SCCS VERSION   : 1.5
  15.   LAST CHANGE    : 3/2/94
  16.  
  17.              Copyright (c) 1990-1994  SNNS Group, IPVR, Univ. Stuttgart, FRG
  18.  
  19.              Copyright (c) 1990-1994  SNNS Group, IPVR, Univ. Stuttgart, FRG
  20.  
  21. ******************************************************************************/
  22. #include <stdio.h>
  23. #include <X11/Xlib.h>
  24. #include <X11/Xutil.h>
  25. #include <X11/Xos.h>
  26. #include <X11/cursorfont.h>
  27. #include <X11/Intrinsic.h>
  28. #include <X11/StringDefs.h>
  29. #include <X11/Shell.h>
  30. #include <X11/Xaw/Box.h>
  31. #include <X11/Xaw/Simple.h>
  32. #include <X11/Xaw/Grip.h>
  33. #include <X11/Xaw/Form.h>
  34. #include <X11/Xaw/SmeBSB.h>
  35. #include <X11/Xaw/SmeLine.h>
  36. #include <X11/Xaw/Viewport.h>
  37. #include <X11/Xaw/Label.h>
  38. #include <X11/Xaw/Toggle.h>
  39. #include <X11/Xaw/Command.h>
  40. #include <X11/Xaw/Cardinals.h>
  41. #include <X11/Xaw/AsciiText.h>
  42. #include <X11/Xaw/MenuButton.h>
  43. #include <X11/Xaw/Scrollbar.h>
  44. #include <X11/Xaw/SimpleMenu.h>
  45.  
  46. #include "ui.h"
  47. #include "kr_ui.h"
  48.  
  49. #include "ui_xWidgets.h"
  50.  
  51. #include "glob_typ.h" 
  52. #include "ui_display.h"
  53. #include "ui_netUpdate.h"
  54. #include "ui_main.h"
  55. #include "ui_mainP.h"
  56. #include "ui_confirmer.h"
  57. #include "ui_remote.h"
  58. #include "ui_remoteP.h"
  59.  
  60. #include "pstep.xbm"    
  61. #include "cselect.xbm"
  62.  
  63. #include "ui_kohonen.ph"
  64.  
  65. /*****************************************************************************
  66.   FUNCTION : kohonen_rem_displayLayerNumber(void)
  67.  
  68.   PURPOSE  : Display the value of ui_NoOfCurrentLayer in the remote panel
  69.   RETURNS  : void
  70.   NOTES    :
  71.  
  72.   UPDATE   : 
  73. ******************************************************************************/
  74.  
  75. static void kohonen_rem_displayLayerNumber(void)
  76. {
  77.     char  buf[50];
  78.  
  79.     if (NOT kohonen_open) return;
  80.  
  81.     sprintf(buf,"%d", noOfCurrentLayer);
  82.     ui_xSetString(ui_LayerWidget, buf);
  83. }
  84.  
  85. /*****************************************************************************
  86.   FUNCTION : kohonen_rem_moveLayerProc
  87.  
  88.   PURPOSE  : callback. Called when cursor buttons or GOTO of LAYER is clicked.
  89.   RETURNS  : void
  90.   NOTES    :
  91.  
  92.   UPDATE   : 
  93. ******************************************************************************/
  94.  
  95. static void 
  96. kohonen_rem_moveLayerProc(Widget w, int moveType, caddr_t call_data)
  97. {
  98.   int  temp;
  99.   Bool doMove = FALSE;
  100.  
  101.   if (krui_getNoOfInputUnits() == 0) {
  102.     ui_confirmOk("No input units defined!");
  103.     return;
  104.   }
  105.   if (!ui_remoteIsCreated) {
  106.     ui_confirmOk("Please create remote panel first !"); 
  107.     return;
  108.   }
  109.  
  110.   switch(moveType) {
  111.   case UI_JUMP:
  112.     temp = ui_xIntFromAsciiWidget(ui_LayerWidget);
  113.     if ((temp>0) AND (temp<= krui_getNoOfInputUnits())) {
  114.       noOfCurrentLayer = temp;
  115.       kohonen_rem_displayLayerNumber();
  116.       doMove = TRUE;
  117.     } else ui_confirmOk("Layer goto: invalid number!");
  118.     break;
  119.   case UI_FIRST:
  120.     if (noOfCurrentLayer!=1) {
  121.       noOfCurrentLayer = 1;
  122.       kohonen_rem_displayLayerNumber();
  123.       doMove = TRUE;
  124.     }
  125.     break;
  126.   case UI_LAST:
  127.     if (noOfCurrentLayer != krui_getNoOfInputUnits()) {
  128.       noOfCurrentLayer = krui_getNoOfInputUnits();
  129.       kohonen_rem_displayLayerNumber();
  130.       doMove = TRUE;
  131.     }
  132.     break;
  133.   case UI_NEXT:
  134.     if (++noOfCurrentLayer > krui_getNoOfInputUnits()) 
  135.       noOfCurrentLayer = 1;
  136.     kohonen_rem_displayLayerNumber();
  137.     doMove = TRUE;
  138.     break;
  139.   case UI_PREVIOUS:
  140.     if (--noOfCurrentLayer < 1)
  141.       noOfCurrentLayer = krui_getNoOfInputUnits(); 
  142.     kohonen_rem_displayLayerNumber();
  143.     doMove = TRUE;
  144.     break;
  145.   }
  146.   if (doMove) ui_rem_stepsProc(NULL, TRUE, NULL);
  147. }
  148.  
  149. /*****************************************************************************
  150.   FUNCTION : kohonen_tree()
  151.  
  152.   PURPOSE  : callback. Called when WINNER button is clicked.
  153.   RETURNS  : void
  154.   NOTES    :
  155.  
  156.   UPDATE   : 
  157. ******************************************************************************/
  158.  
  159. static void kohonen_tree(void)
  160. {
  161.   if (!ui_remoteIsCreated) {
  162.     ui_confirmOk("Please create remote panel first !"); 
  163.     return;
  164.   }
  165.   spanning_tree();
  166.   ui_net_completeRefresh(ui_currentDisplay, UI_GLOBAL); 
  167. }
  168.  
  169.  
  170. /*****************************************************************************
  171.   FUNCTION : kohonen_doneProc
  172.  
  173.   PURPOSE  : callback function of the done-buttom. 
  174.  
  175.   NOTES    :
  176.  
  177.   UPDATE   : 
  178. ******************************************************************************/
  179.  
  180. static void kohonen_doneProc(void)
  181. {
  182.  XtDestroyWidget(kohonen_mainWidget);
  183.  kohonen_open= 0;
  184. }
  185.  
  186. /*****************************************************************************
  187.   FUNCTION : kohonen_xCreateToggleItem
  188.  
  189.   PURPOSE  : create a command widget
  190.   NOTES    :
  191.  
  192.   UPDATE   : 
  193. ******************************************************************************/
  194.  
  195. static Widget kohonen_xCreateToggleItem (char *name, Widget parent, Widget group, Widget left, Widget top)
  196. {
  197.   Cardinal n;
  198.   Widget   w;
  199.   Arg       args[15];
  200.  
  201.   n = 0;
  202.   if (strcmp(name,"ExtraStep") == 0) {
  203.     XtSetArg(args[n], XtNbitmap, 
  204.      (Pixmap) XCreateBitmapFromData(ui_display, 
  205.                     XDefaultRootWindow(ui_display),
  206.                     pstep_bits, pstep_width,
  207.                     pstep_height)); n++;
  208.   }
  209.  
  210.   if (strcmp(name,"CSelect") == 0) {
  211.     XtSetArg(args[n], XtNbitmap, 
  212.      (Pixmap) XCreateBitmapFromData(ui_display, 
  213.                     XDefaultRootWindow(ui_display),
  214.                     cselect_bits, cselect_width,
  215.                     cselect_height)); n++;
  216.   }
  217.   XtSetArg(args[n], XtNborderWidth, 0); n++;
  218.   XtSetArg(args[n], XtNradioGroup, group); n++;
  219.   XtSetArg(args[n], XtNinternalHeight, 1); n++;
  220.   XtSetArg(args[n], XtNinternalWidth , 1); n++;
  221.   XtSetArg(args[n], XtNfromVert , top);  n++;
  222.   XtSetArg(args[n], XtNfromHoriz, left);  n++;
  223.   XtSetArg(args[n], XtNleft  , XtChainLeft); n++;
  224.   XtSetArg(args[n], XtNright , XtChainLeft); n++;
  225.   XtSetArg(args[n], XtNtop   , XtChainTop); n++;
  226.   XtSetArg(args[n], XtNbottom, XtChainTop); n++;
  227.   w = XtCreateManagedWidget(name, toggleWidgetClass, parent, args, n);
  228.   return(w);
  229. }
  230.   
  231.  
  232. /*****************************************************************************
  233.   FUNCTION : kohonen_createWindow
  234.  
  235.   PURPOSE  : create the Kohonen window
  236.   NOTES    :
  237.  
  238.   UPDATE   : 
  239. ******************************************************************************/
  240.  
  241.  
  242. void kohonen_createWindow (void)
  243. {
  244.   Widget       button,done,box,form,kohonenLabel;
  245.   Cardinal     n;
  246.   Arg          arg[25];
  247.   char         buf[20];
  248.  
  249.   int fontWidth = 8;
  250.   int titelWidth  =  7 * fontWidth;
  251.   int numberWidth = 10 * fontWidth;
  252.   
  253.   if (!ui_remoteIsCreated) {
  254.     ui_confirmOk("Please create remote panel first !"); 
  255.     return;
  256.   }
  257.  
  258.   if (!kohonen_open) {
  259.     kohonen_open= 1;
  260.     sprintf(buf, "Kohonen");
  261.     n = 0;  
  262.     kohonen_mainWidget= 
  263.       XtCreatePopupShell(buf,topLevelShellWidgetClass,ui_toplevel,arg,n); 
  264.  
  265.     n = 0;  
  266.     box = XtCreateManagedWidget("box",boxWidgetClass,kohonen_mainWidget,arg,n);
  267.     n = 0;
  268.     form= XtCreateManagedWidget("connt", formWidgetClass, box, arg, n);
  269.  
  270.     /************* Kohonen LAYER *********************************************/
  271.  
  272.     kohonenLabel =
  273.     ui_xCreateLabelItem("LAYER", form, 
  274.     titelWidth, NULL, NULL);
  275.     sprintf(buf,"%d",1);
  276.     ui_LayerWidget =
  277.     ui_xCreateDialogItem("Layers", form, 
  278.     buf, numberWidth, kohonenLabel, NULL);
  279.  
  280.     button = ui_xCreateButtonItem("goto", form, ui_LayerWidget, NULL);
  281.     XtAddCallback (button, XtNcallback, (XtCallbackProc) 
  282.            kohonen_rem_moveLayerProc, (caddr_t) UI_JUMP);
  283.  
  284.     button = ui_xCreateButtonItem("first", form, button, NULL);
  285.     XtAddCallback (button, XtNcallback, (XtCallbackProc) 
  286.            kohonen_rem_moveLayerProc, (caddr_t) UI_FIRST);
  287.  
  288.     button = ui_xCreateButtonItem("prev", form, button, NULL);
  289.     XtAddCallback (button, XtNcallback, (XtCallbackProc) 
  290.            kohonen_rem_moveLayerProc, (caddr_t) UI_PREVIOUS);
  291.  
  292.     button = ui_xCreateButtonItem("next", form, button, NULL);
  293.     XtAddCallback (button, XtNcallback, (XtCallbackProc) 
  294.            kohonen_rem_moveLayerProc, (caddr_t) UI_NEXT);
  295.  
  296.     button = ui_xCreateButtonItem("last", form, button, NULL);
  297.     XtAddCallback (button, XtNcallback, (XtCallbackProc) 
  298.            kohonen_rem_moveLayerProc, (caddr_t) UI_LAST);
  299.  
  300.     button = ui_xCreateButtonItem("STree", form, button, NULL);
  301.     XtAddCallback (button, XtNcallback, (XtCallbackProc) 
  302.            kohonen_tree, kohonenLabel);
  303.  
  304.     /*    ui_ExtraToggle = 
  305.     kohonen_xCreateToggleItem("ExtraStep", form, NULL, button, kohonenLabel);
  306.     ui_xSetToggleState(ui_ExtraToggle, FALSE);
  307.     */
  308.  
  309.     /*    button for future extension
  310.  
  311.     ui_ClassSelect =
  312.     kohonen_xCreateToggleItem("CSelect", form, NULL, ui_ExtraToggle,
  313.     kohonenLabel);
  314.     ui_xSetToggleState(ui_ClassSelect, FALSE);
  315.     */
  316.  
  317.     XawFormDoLayout(form, TRUE);
  318.  
  319.     done= ui_xCreateButtonItem("done", box, NULL, NULL);
  320.     XtAddCallback(done,XtNcallback,(XtCallbackProc)kohonen_doneProc,NULL); 
  321.  
  322.     XtPopup (kohonen_mainWidget, XtGrabNone);
  323.   }
  324.   else ui_confirmOk("Kohonen panel is already created !");
  325. }  
  326.